public class ThreadWait {
    // wait 和 notify操作
    public static void main(String[] args) throws InterruptedException {
        Object object = new Object();
       // object.wait();  // 需要抛出一个异常 InterruptedException 这个异常是很多带有阻塞功能的方法带的
        // 这里面的wait 不加任何参数的话就是“死等状态”，他会一直等待，直到有其他线程唤醒她
        // 到这里直接运行的话就会报一个异常 IllegalMonitorStateException 非法的锁状态异常
        // 为什么有这样的异常，就要先了解 wait 是怎么操作的
        // wait 操作 ：
        //  1.先释放锁
        //  2.进行阻塞等待
        // 3.收到通知后，重新尝试获取锁，并且在获取锁之后，继续往下执行 （这三个操作）

        // 所以这里的 object 对象 就没有加锁 ，所以就不能释放锁，就会报异常

        // 因此 wait 操作是要搭配synchronized操作的
        synchronized (object){
            System.out.println("wait之前");
            object.wait();  // 虽然这里的 wait 是阻塞了。阻塞在 synchronized 代码块这里，实际上，这里的阻塞是释放锁，此时的其他线程是可以获取到object这个对象的锁状态的
            // 此时这里的阻塞 就是处在 waiting 状态
            System.out.println("wait之后");
        }
    }
}
